/*
 * Título: gestHora. Aplicación web de gestión de horarios para conservatorios.
 * Alumnos:
 * - Javier Pardo Muñoz. I.T. Informática de Gestión
 * - Antonio Prior Cazorla. I.T. Informática de Gestión
 * Director: Dr. José Raúl Romero Salguero.
 *     
 *  Copyright (C) 2013 Javier Pardo Muñoz / Antonio Prior Cazorla
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.

 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package es.uco.gesthora.business;

import es.uco.gesthora.business.gestorRutas.GestorRutas;
import es.uco.gesthora.data.DAO.DAOAlumno;
import es.uco.gesthora.data.DAO.DAOAsignatura;
import es.uco.gesthora.data.DAO.DAOHorario;
import es.uco.gesthora.data.DAO.DAOProfesor;
import es.uco.gesthora.data.DAO.DAOSecretario;
import es.uco.gesthora.data.gestorPropiedades.GestorPropiedades;

/**
 * Maneja la capa lógica de todo lo relacionado con los ficheros de
 * configuración del sistema.
 *
 * @author Javier Pardo Muñoz / Antonio Prior Cazorla
 *
 */
public class Configuracion {

    private static Configuracion instance = new Configuracion();
    private String path = GestorRutas.getInstance().getWebInfPath();
    private GestorPropiedades SQL = null;
    private GestorPropiedades APP = null;

    /**
     * Constructor por defecto de la clase
     */
    private Configuracion() {

        SQL = new GestorPropiedades(path, "BaseDatos.properties");
        APP = new GestorPropiedades(path, "DatosAplicacion.properties");

    }

    /**
     * Devuelve una instancia de la clase usando el patrón Singleton
     *
     * @return Instancia de la clase Configuracion
     */
    public static Configuracion getInstance() {
        return instance;
    }

    /**
     * Realiza las operaciones lógicas necesarias para almacenar la
     * configuración de la base de datos en el properties necesario
     *
     * @param servidorBD: nombre del servidor MySQL
     * @param usuarioBD: usuario con permisos para acceder a la base de datos
     * @param passwordBD: password del usuario
     */
    public void configurarBD(String servidorBD, String usuarioBD, String passwordBD) {

        SQL.modPropiedad("ConexionDBUrl", "jdbc:mysql://" + servidorBD + "/" + "gesthora");
        SQL.modPropiedad("ConexionDBUser", usuarioBD);
        SQL.modPropiedad("ConexionDBPassword", passwordBD);

        SQL.guardarProperties(path, "BaseDatos.properties", "Fichero de configuración de la Base de Datos");

    }

    /**
     * Realiza las operaciones lógicas necesarias para almacenar la
     * configuración del email en el properties necesario
     *
     * @param servidorMail: nombre del servidor
     * @param puertoMail: puerto del servidor
     * @param authMail: true/false dependiendo de si el servidor necesita
     * autenticación
     * @param usuarioMail: nombre de usuario
     * @param passwordMail: password de usuario
     * @param sslMail: true/false dependiendo de si el servidor usa SSL
     */
    public void configurarMail(String servidorMail, String puertoMail, String authMail, String usuarioMail, String passwordMail, String sslMail) {

        APP.modPropiedad("servidor", servidorMail);
        APP.modPropiedad("puerto", puertoMail);
        APP.modPropiedad("auth", authMail);
        APP.modPropiedad("usuario", usuarioMail);
        APP.modPropiedad("password", passwordMail);
        APP.modPropiedad("ssl", sslMail);
        APP.guardarProperties(path, "DatosAplicacion.properties", "Fichero de configuración de la aplicación");

    }

    /**
     * Realiza las operaciones lógicas necesarias para almacenar la
     * configuración del tiempo de inicio/fin/modificación de solicitud en el
     * properties necesario
     *
     * @param inicioSolicitudes: fecha de inicio de solicitudes
     * @param finSolicitudes: fecha de fin de solicitudes
     * @param finModificaciones: fecha de fin de modificaciones
     */
    public void configurarTiempos(String inicioSolicitudes, String finSolicitudes, String finModificaciones) {

        //Si la fecha de fin de solicitudes se cambia, el algoritmo puede volver a iniciarse
        if (!APP.getPropiedad("finSolicitudes").equals(finSolicitudes)) {
            APP.modPropiedad("algoritmoLanzado", "false");
        }

        APP.modPropiedad("inicioSolicitudes", inicioSolicitudes);
        APP.modPropiedad("finSolicitudes", finSolicitudes);
        APP.modPropiedad("finModificaciones", finModificaciones);

        APP.guardarProperties(path, "DatosAplicacion.properties", "Fichero de configuración de la aplicación");

    }

    public void inicializar(String tipo) {

        if (tipo.equals("alumnos")) {
            DAOAlumno.getInstance().borrarTodo();
        }
        if (tipo.equals("horariosAlumnos")) {
            DAOHorario.getInstance().borrarHorariosAlumnos();
        }
        if (tipo.equals("profesores")) {
            DAOProfesor.getInstance().borrarTodo();
        }
        if (tipo.equals("asignaturas")) {
            DAOAsignatura.getInstance().borrarTodo();
        }
        if (tipo.equals("secretarios")) {
            DAOSecretario.getInstance().borrarTodo();
        }
        if (tipo.equals("horariosAsignaturas")) {
            DAOHorario.getInstance().borrarHorariosAsignatura();
        }
        
    }
}
